IICS(CAI)のチュートリアルを試してみる(Calculator編)
はじめに
データアナリティクス事業本部のkobayashiです。
Informatica Intelligent Cloud Services(以降、IICS)はオンプレミスおよびクラウド環境に置かれているデータサービスとアプリケーションサービスを統合するiPaaS(integration Platform as a Service)製品です。
IICSの機能の一つであるInformatica Cloud Application Integration(以降、CAI)ではAPIをGUIの操作で簡単に構築することができます。
前回は一番シンプルなAPIを作成しました。
今回も公式のチュートリアルを実践してみたいと思います。今回行うのはリクエスト値を使って四則演算を行い結果をリクエストとして返すAPIを作成します。
四則演算を行うAPI(calculator)の作成
基本的にはInformatica Cloud Application Integration - Tutorial:Calculator に記載されいている内容を実践していきます。
今回作成するAPIの特徴は以下の通りです。
- リクエストの値を取得して後続の処理で扱う
- 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
- エラーハンドリングを行う
リクエスト値は前回でも扱いましたので、外部APIを使う所とエラーハンドルを行う点が大きな変更点となります。作成手順としては以下になります。
- サービスコネクタで外部サービスを作成する
- サービスコネクタのアプリケーション接続を作成する
- APIプロセスを作成する
では早速作っていきます。
外部APIをサービスコネクタとして登録
四則演算を行う機能はCAIでも実装できますが、このチュートリアルでは外部APIを使うことが目的なので外部APIコネクタを作成します。
使うサービスはCalculator Web Service を使います。このサービスはAdd
,Divide
,Multiply
,Subtract
で四則演算を行ってくれます。
手順1) IICSにログインしてアプリケーション統合
を選択し、サイドメニューから新規
を選択するとモーダルが表示されるのでその中からサービスコネクタ
>WSDLからの作成
を選択し、作成
を押下する。
手順2) サービスコネクタの設定値を入力し次へ
を押下する。
- WSDL URL :
http://www.dneonline.com/calculator.asmx?WSDL
を入力 - 認証の使用 : チェックしない
手順3) サービスコネクタで使用できる操作が表示されるが、特に設定を変更する必要はないので次へ
を押下する。
手順4) 次にプロセスで使うためにサービスコネクタのアプリケーション接続を作成する。これは先の手順で作成したサービスコネクタをどのランタイム環境で実行するのかを設定する。
サイドメニューから新規
を選択するとモーダルが表示されるのでその中からアプリケーション接続
を選択し、作成
を押下します。
手順5) アプリケーション接続の設定値を入力し保存
を押下して設定を保存する。
- タイプ : 手順3で作成したサービスコネクタを選択
- 実行 : 実行したいランタイム環境を選択
ここまででプロセスから外部サービスを呼び出す設定ができたので、API本体のプロセスを作成します。
プロセスの作成
次にリクエストの値を外部APIへ中継し、外部APIからレスポンスから受け取ってその結果をレスポンスとしてクライアントへ返すプロセスを作成します。
手順1) サイドメニューから新規
を選択するとモーダルが表示されるのでその中からプロセス
を選択し、作成
を押下する。
手順2) プロセスの作成画面デザイナーが表示されて図のように開始
と終了
のステップが用意されているのでまずはこれを編集する。
開始
ステップを選択し、左下のメニューより全般
を押下します。名前
の欄に今回作成するAPIプロセス名を入力します。これがエンドポイント名にもなります。今回はp_calclator
としています。
手順3) APIへのアクセス制御を行うために開始
を左下から押下する。
*今回は特にアクセス制御をしないため匿名アクセスを許可
を選択します。本番で運用する場合は十分な制御を行ってください。この解説は別途エントリで行う予定です。
手順4) リクエストで送られた値を使いますのでまずは入力フィールド
を左下から押下るす。リクエストとして受け取りたいフィールドを以下の様に設定する。
名前 | タイプ |
---|---|
NumberA | 整数 |
NumberB | 整数 |
手順5) 次にAPIで返すレスポンスを指定するために出力フィールド
を左下から押下し、レスポンスとして返したいフィールドを以下の様に設定する。
Quotient
のタイプのみテキスト
となっていますが、これは除算の際に0で割った場合にエラーになってしまいますのでその際のエラーメッセージを返すためにテキストにしています。
名前 | タイプ |
---|---|
Sum | 整数 |
Difference | 整数 |
Product | 整数 |
Quotient | テキスト |
手順6) 次にプロセス内で扱う変数を設定するために一時フィールド
を左下から押下し、フィールドを以下の様に設定する。
名前 | タイプ |
---|---|
add_input | タイプをさらに表示 を選択 -> カテゴリ で定義された接続タイプ を選択 -> 作成したアプリケーション接続を選択 -> Add_AT を選択 |
subtract_input | タイプをさらに表示 を選択 -> カテゴリ で定義された接続タイプ を選択 -> 作成したアプリケーション接続を選択 -> Subtract__AT を選択 |
multiply_input | タイプをさらに表示 を選択 -> カテゴリ で定義された接続タイプ を選択 -> 作成したアプリケーション接続を選択 -> Multiply_AT を選択 |
divide_input | タイプをさらに表示 を選択 -> カテゴリ で定義された接続タイプ を選択 -> 作成したアプリケーション接続を選択 -> Divide_AT を選択 |
fault | テキスト |
手順7) デバッグ用にプロセス処理中のログを全て記録するために詳細
を左下から押下し、トレースレベルで詳細
を選択する。
手順8) デザイナのステップの中から割り当て
ステップ(図の赤矢印)をドラッグ&ドロップで開始
、終了
ステップの間に配置する。
設置した割り当て
ステップを選択し、左下の割り当て
を押下します。フィールドでアプリケーション接続(外部API)にリクエストで送られた値を送るように指定します。
フィールド | タイプ | 開始 |
---|---|---|
add_input > intA | フィールド | NumberA |
add_input > intB | フィールド | NumberB |
subtract_input > intA | フィールド | NumberA |
subtract_input > intB | フィールド | NumberB |
multiply_input > intA | フィールド | NumberA |
multiply_input >intB | フィールド | NumberB |
divide_input > intA | フィールド | NumberA |
divide_input > intB | フィールド | NumberB |
手順9) リクエストで送られた値を使って四則演算を行うために並列パス
を使用する。
左の並列パス
ステップを手順8で作成した割り当てと終了の間にドラッグ&ドロップします。左下の並列パス
から押下して、パスを四則演算様にパス0からパス3までを作成します。
手順10) 4つの並列パス上にサービス
ステップをドラッグ&ドロップし、それぞれ四則演算を割り当てる。
4つのサービス
の名前をそれぞれ加算
、減算
、乗算
、除算
に変更しサービスステップをそれぞれ以下の様に変更します。
サービス | サービスタイプ | 接続 | アクション |
---|---|---|---|
加算 | 接続 | 作成したアプリケーション接続を選択 | Add |
減算 | 接続 | 作成したアプリケーション接続を選択 | Subtract |
乗算 | 接続 | 作成したアプリケーション接続を選択 | Multiply |
除算 | 接続 | 作成したアプリケーション接続を選択 | Divide |
手順11) 除算は割る数であるNumberBに0が入った場合にエラーになってしまうのでこれをケアするためにフォールト処理を追加する。
左下のフォールト
を押下し、フォールトの取得
をチェックすると図のようにフォールト処理が行えるパスが作成されます。
フォールト処理としてフォールトが発生した場合に他の演算を待機するため、2秒待機し2秒後に一時変数のfaultフィールド
にYes
の値が入るようにします。
手順12) フォールトのパスに待機
と割り当て
ステップを設定し以下の設定を行う。
ステップ | プロパティ | 内容 |
---|---|---|
待機 | 待機 | 待機時間を2秒に設定 |
割り当て | 割り当て | フィールド : fault 、コンテンツ 、開始 |
手順13) フォールトで起きた場合に処理を分岐させるために、並列パスの終端と終了の間にディシジョン
ステップを入れ処理を分岐さる。分岐の条件として一時フィールドのfault
を使い、中身がYes
の場合にフォールト処理に応じたレスポンスを返す処理を行う。
手順14) 分岐したそれぞれのパス上に割り当て
ステップを設置して処理が正常の場合と失敗の場合でレスポンスの値を分けて設定する。
- ディシジョンが次の値に等しい
Yes
-> 処理失敗のステップ
フィールド | タイプ | 開始 |
---|---|---|
Sum | フィールド | AddResponse > AddResult |
Difference | フィールド | SubtractResponse > SubtractResult |
Product | フィールド | MultiplyResponse > MultiplyResult |
Quotient | テキスト | 失敗 |
処理失敗の場合は除算の結果として文字列で失敗
をレスポンスとして返す
- もしくは -> 処理成功のステップ
フィールド | タイプ | 開始 |
---|---|---|
Sum | フィールド | AddResponse > AddResult |
Difference | フィールド | SubtractResponse > SubtractResult |
Product | フィールド | MultiplyResponse > MultiplyResult |
Quotient | テキスト | DivideResponse > DivideResult |
長くなりましたが以上でAPIプロセスは出来上がりました。全体像は以下の様になります。
APIプロセスをパブリッシュしてリクエストを送ってレスポンスを確かめてみます。
APIエンドポイントにリクエストを送ってみる(正常系)
curl -X POST "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxx/p_calclator" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"NumberA\": 20, \"NumberB\": 4}"
レスポンスとして以下が返ってきます。
{ "Sum": 24, "Difference": 16, "Product": 80, "Quotient": "5" }
APIエンドポイントにリクエストを送ってみる(異常系)
curl -X POST "https://apne1-cai.dm1-ap.informaticacloud.com:443/active-bpel/public/rt/xxxxxxxxxx/p_calclator" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"NumberA\": 20, \"NumberB\": 0}"
レスポンスとして以下が返ってきます。除算の結果に失敗の文字列が入っていることが確認できます。
{ "Sum": 20, "Difference": 20, "Product": 0, "Quotient": "失敗" }
まとめ
IICSのCAIでAPIを作成しました。
- リクエストの値を取得して後続の処理で扱う
- 外部APIと連携して値を外部APIに送りそのレスポンスを後続の処理で扱う
- エラーハンドリングを行う
の要素を含むAPIを作成してみましたが少し手の込んだ処理をしているのでプロセスも複雑になりますが処理フローがそのままGUIで表現されているのでとてもわかりやすいのではないかと思います。
最後まで読んで頂いてありがとうございました。